dojo.require("dojo.data.ItemFileWriteStore");
dojo.require("dojo.data.ItemFileReadStore");
dojo.require("dojo.date");

dojo.require("dijit.form.ValidationTextBox");
dojo.require("dijit.form.SimpleTextarea");
dojo.require("dijit.Dialog");
dojo.require("dijit.layout.ContentPane");
dojo.require("dijit.form.Button");
dojo.require("dijit.form.DateTextBox");
dojo.require("dijit.form.TimeTextBox");

dojo.require("dojox.grid.DataGrid");
dojo.require("dijit.form.ComboBox");
dojo.require("dijit.form.FilteringSelect");
dojo.require("dijit.form.MultiSelect");
dojo.require("dijit.form.RadioButton");
dojo.require("dijit.form.CheckBox");

dojo.require("dojo.fx");

var D = new function(){
	/**
	 * 填充表格数据
	 * @param tableId	表格ID
	 * @param items		数据		[{},]
	 */
	this.fillTableData = function (tableId,items){
		var table = dijit.byId(tableId);
		var data = {items:items};
		table.setStore(new dojo.data.ItemFileWriteStore({data:data}));
	}
	
	/**
	 * 表格增加一行数据
	 * @param tableId	表格ID
	 * @param newItem	新数据	{}
	 * @param tableRowLimit	表格总行数限制，可以空，空则不限制
	 */
	this.addTableData = function (tableId,newItem,tableRowLimit){
		var table = dijit.byId(tableId);
		var store = table.store;
		if(store == null){
			this.fillTableData(tableId,[newItem]);
		}else{
			if(tableRowLimit != null){
				if(table.rowCount >= tableRowLimit){
					store.deleteItem(table.getItem(0));
				}
			}
			store.newItem(newItem);
		}
		table.render();
	}
	
	/**
	 * 返回表格中选中的一行
	 * @param tableId	表格ID	 
	 */
	this.getSelectedRowOfTable = function(tableId){
		var table = dijit.byId(tableId);
		return table.selection.getSelected();
	}
	
	
	
	/**
	 * 获得下拉列表框值
	 * @param comboId	下拉框ID
	 * @return 下拉框值
	 */
	this.getComboValue = function (comboId){
		return dijit.byId(comboId).attr('value');
	}
	/**
	 * 获得下拉列表文字
	 * @param comboId	下拉框ID
	 * @return 	下拉框文字
	 */
	this.getComboText = function (comboId){
		return dijit.byId(comboId).attr('displayedValue');
	}
	
	
	/**
	 * 初始化下拉列表框
 	 * @param comboId	下拉框ID
 	 * @param items	下拉框数据	[{value:值,name:文字},]			//这个必须叫name，否则显示不出来，哏儿吧
	 */
	this.initCombo = function(comboId,items){
		var combo = dijit.byId(comboId);
		combo.store = new dojo.data.ItemFileReadStore(
			{data:{identifier:"value",label:"name",items:items}});
		combo.attr("value","");
	}
	
	/**
	 * 初始化多选列表框
	 * @param selectId	多选框ID
	 * @param items	列表框数据	[{value:值,name:文字},]	
	 */
	this.initMultiSelect = function(selectId,items){
		var select = dojo.byId(selectId);
		select.options.length = 0
		for(var i in items){
			var item = items[i];
			var op = dojo.create("option",{value:item.value,innerHTML:item.name});
			dojo.place(op,select);
		}
	}
	
	/**
	 * 获得多选框值，获得的是value的列表、
	 * @param selectId	多选框ID
	 * @return 数组[]
	 */
	this.getMultiSelectValue = function(selectId){
		return dijit.byId(selectId).getValue();
	}
	
	/**
	 * 获得日期时间对象
	 * @param dateId	日期ID
	 * @param timeId	时间ID	可空，如果空，则只显示日期的
	 * @return JS日期对象
	 */
	this.getWholeDateTime = function(dateId,timeId){
		var wholeDateTime = new Date(dijit.byId(dateId).value);
		if(timeId!=null){
			var time = dijit.byId(timeId).value;
			wholeDateTime.setHours(time.getHours());
			wholeDateTime.setMinutes(time.getMinutes());
			wholeDateTime.setSeconds(time.getSeconds());
		}
		return wholeDateTime;
	}
	/**
	 * 获得单选框组值
	 * @param radioName	单选框组名称，注意是名称，不是ID
	 * @return 选中的单选框值
	 */
	this.getRadioValue = function(radioName){
		var selectedRadio = dojo.query("input[type=radio][name="+radioName+"]:checked");
		if(selectedRadio.length == 1){
			return selectedRadio[0].value;
		}else{
			return null;
		}
	}
	
	
	/**
	 * 获得单选框组值组
	 * @param radioName	复选框组名称，注意是名称，不是ID
	 * @return 选中的复选框值组
	 */
	this.getCheckBoxValues = function(checkBoxName){
		var selectedCheck = dojo.query("input[type=checkbox][name="+checkBoxName+"]:checked");
		var checkedList = [];
		dojo.forEach(selectedCheck,function(c){
			checkedList.push(c.value);
		});
		return checkedList;
	}

	/**
	 * 单个复选框是否被选中
	 * @param checkBoxId	复选框ID
	 * @return 是否选中	boolean
	 */
	this.getSingleCheckBoxChecked = function(checkBoxId){
		return dijit.byId(checkBoxId).checked;
	}
	
	
	/**
	 * 单个复选框是否被选中
	 * @param checkBoxId	复选框ID
	 * @return 是否选中	int:0=false,其他true
	 */
	this.getSingleCheckBoxCheckedInt = function(checkBoxId){
		return dijit.byId(checkBoxId).checked?1:0;
	}
	
	
	
	
	
	/**
	 * 显示一个东西，一般是div/span等
	 * @param nodeId	节点ID
	 */
	this.show = function(nodeId){
		dojo.style(dojo.byId(nodeId),"display","inline");
	}
	/**
	 * 隐藏一个东西
	 * @param nodeId	节点ID
	 */
	this.hide = function(nodeId){
		dojo.style(dojo.byId(nodeId),"display","none");
	}
};

var ANI = new function(){
	function startMulitMove(nodeId,path,stepTime,isCycle){
		var step = path.shift();
		if(isCycle){
			path.push(step);
		}
		dojo.animateProperty({ 
			 node: nodeId, 
			 duration:stepTime, 
		     properties: { 
		        left:step[0],
		        top:step[1]
		    },
		    onEnd:function(){
			    if(path.length!=0){
		    		startMulitMove(nodeId,path,stepTime,isCycle);
			    }
		    }
		}).play();
	}
	/**
	 * 沿轨迹移动
	 * @param nodeId	动画主体ID
	 * @param path	轨迹[[left,top],]
	 * @param stepTime	单步运动时间，可空，默认2秒
	 * @param isCycle	是否循环，可空为不循环，写成true为循环
	 */
	this.moveAlongPath = function(nodeId,path,stepTime,isCycle){
		if(stepTime == null){
			stepTime = 2000;	//默认每步骤时间为两秒
		}
		startMulitMove(nodeId,path,stepTime,isCycle);
	}
	
	/**
	 * 切换内容
	 * @param divId	容器ID
	 * @param newContext	新内容HTML
	 * @param stepTime	切换速度，可空，默认为1秒
	 */
	this.changeContext = function(divId,newContext,stepTime){
		if(stepTime == null){
			stepTime = 1000;	//默认每步骤时间为1秒
		}
		dojo.fadeOut({ 
			 node: divId, 
			 duration: stepTime/2,
			 onEnd:function(){
				dojo.byId(divId).innerHTML=newContext;
				dojo.fadeIn({ 
					 node: divId, 
					 duration: stepTime/2
				 }).play();
		 	} 
		 }).play() 
	}
	
	/**
	 * 隐去内容
	 * @param divId	容器ID
	 * @param timeout	隐去时间
	 */
	this.fadeOut = function(divId,timeout){
		dojo.fadeOut({ 
			 node: divId, 
			 duration: timeout
		 }).play() 
	};
};

